#ifndef __WS2812B_H
#define __WS2812B_H
#include <rtthread.h>
#include <rtdevice.h>
#include "drv_spi.h"
#include "n32g45x.h"
#include "n32_msp.h"
#include <stdio.h>
#include <board.h>
#include "time.h"

// #include <dfs_posix.h>
/**
如果使用SPI1，则配置
spi_ws2812b_config() 中
cfg.max_hz      =       6 * 1000 *1000;
数据输出MOSI是PA7

如果使用SPI2，则配置
spi_ws2812b_config() 中
cfg.max_hz      =       12 * 1000 *1000;
数据输出MOSI是PB15

如果是用SPI3，则配置
spi_ws2812b_config() 中
cfg.max_hz      =       12 * 1000 *1000;
数据输出MOSI是PB5
*/
/**************************************** 绘图相关定义 *******************************************/
#define WIDTH 32
#define HEIGHT 8
#define RES_WIDTH (WIDTH * HEIGHT)
#define WS_CANVAS_SIZE RES_WIDTH + WIDTH *HEIGHT * 3 * 8

#define BITE_0 0xC0
#define BITE_1 0xF0
#define Boolean bool
#define TRUE 1
#define FALSE 0
//颜色
typedef struct __WS_Color
{
  uint8_t Red;
  uint8_t Green;
  uint8_t Blue;
  int Transparent; //透明度，如果是文字，是显示背景色还是透明色
} WS_Color;

//开窗
typedef struct __WS_Window
{
  int16_t X;
  int16_t Y;
  uint16_t Width;
  uint16_t Height;
} WS_Window;

void spi_ws2812b_config(void); // 配置SPI灯板
void spi_ws2812b_init(void);   // 初始化SPI
int ws2812_led_init(void);
void WS_SetBrightness(uint8_t V);                                             // 设置LED灯亮度
void WS_SetForegroundColor(WS_Color Color);                                   // 设置前景色
void WS_SetBackgroundColor(WS_Color Color);                                   // 设置背景色
void WS_SetTransparent(uint8_t V);                                            // 设置当前透明度
void WS_OpenWindow(int16_t X, int16_t Y, uint16_t Width, uint16_t Height);    // 开窗（定点绘制）
void WS_CloseWindow(void);                                                    // 关窗口（全屏绘制）
void WS_Show(void);                                                           // 刷新显示
void WS_Clear(void);                                                          // 清屏，清屏会自动调用Show函数
void WS_Erase(void);                                                          // 擦除开窗位数据为背景色，不会调用Show函数
void WS_DrawPoint(int16_t X, int16_t Y, WS_Color Color);                      // 画一个像素点
void WS_DrawLine(int16_t X1, int16_t Y1, int16_t X2, int16_t Y2);             // 画线
void WS_DrawRectangle(int16_t X, int16_t Y, uint16_t Width, uint16_t Height); // 画矩形边框
void WS_FillRectangle(int16_t X, int16_t Y, uint16_t Width, uint16_t Height); // 画实心矩形
void WS_DrawCircle(int16_t X, int16_t Y, uint16_t Radius);                    // 画圆边（根据中心点坐标）
void WS_FillCircle(int16_t X, int16_t Y, uint16_t Radius);                    // 画实心圆
int WS_DrawChar(int16_t X, int16_t Y, char C, Boolean Compact);               // 打印一个字符
int WS_DrawString(int16_t X, int16_t Y, char *Text, Boolean Compact);         // 打印字符（仅限英文）/0结尾
void WS_DrawImage(int16_t X, int16_t Y, uint8_t *Image);                      // 绘制图片
// void WS_DrawPicture(int16_t X,int16_t Y，uint16_t Width,uint16_t Height ,WS_Color* Picture);     // 绘制图片（该图片格式为WS_Color数组）
/**************************************** 默认颜色 *******************************************/
static WS_Color COLOR_RED = {0xFF, 0, 0, TRUE};
static WS_Color COLOR_GREEN = {0, 0xFF, 0, TRUE};
static WS_Color COLOR_BLUE = {0, 0, 0xFF, TRUE};
static WS_Color COLOR_WITHE = {0xFF, 0xFF, 0xFF, TRUE};
static WS_Color COLOR_BLACK = {0, 0, 0, TRUE};
static WS_Color COLOR_YELLOR = {0xFF, 0xFF, 0, TRUE};

void wifi_led_contrl(unsigned char *buff);
#endif /* __WS2812B_H */
